
#ifndef __XAPI_H__
#define __XAPI_H__


#define XAPI_HID	27	// (SH_LASTRESERVED(26)+1		// copy from kernel.h

#define XAPI_MID_DISPATCHCALL	1
#define XAPI_MID_SETYAPISVCPROC	(XAPI_MID_DISPATCHCALL+1)
#define XAPI_MID_GETZONE		(XAPI_MID_SETYAPISVCPROC+1)
#define XAPI_MID_SETZONE		(XAPI_MID_GETZONE+1)


//
// error codes
//
#define XAPI_INIT_FAILD			-1
#define XAPI_INVALIDE_PARA 		XAPI_INIT_FAILD-1
#define XAPI_INVALIDE_HANDLE 	XAPI_INVALIDE_PARA-1
#define XAPI_CALL_EXCEPTION 	XAPI_INVALIDE_HANDLE-1	


#ifndef XAPI_IMP

//#define WINCEMACRO
#include <psyscall.h>

__inline int XAPI_DispatchCall(HANDLE hProc, DWORD dwAddr, DWORD dwParaNumb, ParaInfo* pPara)
{
	return (*(int (*)(HANDLE, DWORD, DWORD, ParaInfo*))(IMPLICIT_CALL(XAPI_HID, XAPI_MID_DISPATCHCALL)))(hProc, dwAddr, dwParaNumb, pPara);
}
__inline int XAPI_SetYAPIHandlProc(HANDLE hAPISet, HANDLE hProc)
{
	return (*(int (*)(HANDLE, HANDLE))(IMPLICIT_CALL(XAPI_HID, XAPI_MID_SETYAPISVCPROC)))(hAPISet, hProc);
}
__inline int XAPI_GetZone(DWORD* pdwZone)
{
	return (*(int (*)(DWORD*))(IMPLICIT_CALL(XAPI_HID, XAPI_MID_GETZONE)))(pdwZone);
}
__inline int XAPI_SetZone(DWORD dwZone)
{
	return (*(int (*)(DWORD))(IMPLICIT_CALL(XAPI_HID, XAPI_MID_SETZONE)))(dwZone);
}

#endif	//#ifndef XAPI_IMP

#endif	//#define __XAPI_H__
